#!/bin/bash
# 
# 依赖：
#     taosdump，通过 TDengine 官方 taosTools 安装
#     ossutil，安装参考：https://help.aliyun.com/zh/oss/developer-reference/install-ossutil
#
# 功能：
#     1. 按当前日期做备份一次 ems_ts 和 iot_ts 的 schema
#     2. 按 config/archive.properties 中记录的最后备份日期，继续备份 ems_ts、iot_ts 的数据，备份到当前日期为止

# 遇到错误停止执行
set -e

# 按主机名推断环境，决定 base_dir 的值
case "$(hostname)" in
"ems-seve-prd001"|"ems-seve-prd002"|"ems-seve-prd003")
    base_dir="/opt/ems-archive" ;;
"ems-seve-prd004"|"ems-seve-prd005"|"ems-seve-prd006"|"ems-seve-prd007")
    echo "ERR: 不允许在这台主机上运行"
    exit 1 ;;
"ems-seve-prd008"|"ems-seve-prd009"|"ems-seve-prd010")
    base_dir="/work/opt/ems-archive" ;;
"ecs-377e-1103456")
    echo "INFO: 测试环境 !!!"  
    base_dir="/mnt/sdc/opt/ems-archive" ;;
*)  
    echo "ERR: 无法识别主机 !!!"
    exit 1 ;;
esac

# 引入封装的逻辑
source $base_dir/bin/common.sh

# 初始化
cm_init

# 加载配置文件
cm_load_properties "archive.properties"

# ----------------------------- 变量 -----------------------------

# 当前日期
today=`date +%Y%m%d`

printf "DEBUG: custom variable   [%-20s] = %s\n" "today" $today

#
# 用 taosdump 导出两个数据库的 schema
#
# 参数:
#     $1 数据库名称
#
#
function dump_schema_taosdump(){
    # 开始时间戳
    local st=`date +%s`
    local db=$1
    # 导出到哪个目录
    local schema_dir="${expt_dir}/${db}/${db}_schema_${today}"
    # 导出目录的父目录
    local schema_pdir="${expt_dir}/${db}/"
    # 导出目录的名称
    local schema_dirn="${db}_schema_${today}"
    # 导出的结果
    local schema_expt_rst="${expt_dir}/${db}/${db}_schema_${today}_result.txt"
    # 导出的日志
    local schema_expt_log="${expt_dir}/${db}/${db}_schema_${today}.log"
    # tar.gz 包具体位置
    local schema_tar="${expt_dir}/${db}/${db}_schema_${today}.tar.gz"
    #
    printf "DEBUG: custom variable   [%-20s] = %s\n" "schema_dir" $schema_dir
    printf "DEBUG: custom variable   [%-20s] = %s\n" "schema_pdir" $schema_pdir
    printf "DEBUG: custom variable   [%-20s] = %s\n" "schema_dirn" $schema_dirn
    printf "DEBUG: custom variable   [%-20s] = %s\n" "schema_expt_rst" $schema_expt_rst
    printf "DEBUG: custom variable   [%-20s] = %s\n" "schema_expt_log" $schema_expt_log
    printf "DEBUG: custom variable   [%-20s] = %s\n" "schema_tar" $schema_tar
    # 清空前一次导出的的数据
    rm -rf "$schema_dir"
    mkdir -p "$schema_dir"
    #
    # 导出
    #
    echo "INFO: 正在导出 ${db} 的表结构......"
    taosdump -u "$taos_user" "-p$taos_pwd" -s -D "$db" -o "$schema_dir" -r "$schema_expt_rst" 2>&1 | tee "$schema_expt_log"
    echo "INFO: 正在导出 ${db} 的表结构, 执行完毕!"
    #
    # 打包
    #     示例: tar -czf /d/opt/ems-archive/data/export/ems_ts/ems_ts_20231010.tar.gz -C /d/opt/ems-archive/data/export/ems_ts ems_ts_20231010
    #
    mv $schema_expt_rst "${schema_dir}/"
    mv $schema_expt_log "${schema_dir}/"
    tar -czf "$schema_tar" -C "$schema_pdir" "$schema_dirn"
    #
    # 上传
    #
    if [ -f "$schema_tar" ]; then
        echo "INFO: 已打包 ${db} 的表结构: "$schema_tar""
        rm -rf "$schema_dir"
        oss_upload "$db" "$schema_tar"
    fi
    # 结束时间戳
    local et=`date +%s`
    # 计算总耗时
    local time_spent=$(cm_calc_time $st $et)
    echo "INFO: dump [$db] schema finish, total time spent [$time_spent]"
}
